<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //对象写法上的更新
      //1.对象的键名和键值相同的时候可以省略一个
      //

      //2.对象里函数的简写
      //把ES5对象里的函数 冒号和function声明省略掉
      /*  let obj = {
        myname: "张三",
        fn: function () {
          console.log("fn", this);
        },
        fn1: () => {
          console.log("fn1", this);
         },
        fn2() {
          //ES6对于对象里函数简写形式
          console.log("fn3", this);
        },
      };
      console.log(obj);
      obj.fn();
      obj.fn1();
      obj.fn2(); */

      //
      //
      //3.对象动态的键名
      //对象的键名无论是否加上引号,他的类型都是字符串,且默认不会解析变量
      //对象只会解析键值 键值可以是任意类型
      // var myname = "张三";
      // var myage = "myage";
      // var obj = {
      //   myname: myname,
      //   myage: 20,
      //   height: "180cm",
      // };
      // console.log(obj);

      //ES6 如果想让对象的键名解析变量 可以使用[]包裹
      var myname = "张三";
      var myage = "myage";
      var obj = {
        [myname + "1"]: myname,
        [myage]: 20,
        height: "180cm",
      };
      console.log(obj);

      //对象的键名只能是字符串
      //object Object
      var myage = { hello: "123" };
      var obj = {
        [myage]: 20,
        myname: "张三",
      };
      console.log(obj);
      console.log(obj[myage]);
      for (var key in obj) {
        console.log(typeof key);
      }

      //1.默认对象的键名不会解析变量 如果想解析 通过[]包裹
      //2.对象的键名只能是字符串类型 其他类型也会转成字符串类型
    </script>
  </body>
</html>
